const { defineConfig } = require('@vue/cli-service')
const Mock = require('mockjs') // 1.引入mockjs
const bodyParser = require('body-parser') // 引入转json的中间件
const { list } = Mock.mock({
  // 属性 list 的值是一个数组，其中含有 1 到 10 个元素
  'list|40': [{
    // 属性 id 是一个自增数，起始值为 1，每次增 1
    'id|+1': 1,
    'image': '@image(200X200,@color)',
    'title': '@ctitle(30,50)',
    'price|1-100.1-2': 1
  }]
})

const { products } = Mock.mock({
  'products|50': [{
    'id|+1': 1,
    'classify': '@pick(["手机数码","礼品鲜花","男装女装"])',
    "title": '@ctitle(3,5)',
    'image': '@image(100X100,@color)'
  }]
})
// 存储注册信息：注册的账号密码
const users = [
  // { username: 13022223333, password: 123456 }, // 如果需要有一个默认的账号密码
]
module.exports = defineConfig({
  transpileDependencies: true,
  // 模拟开发者服务器
  devServer: {
    setupMiddlewares: (mid, dev) => {
      dev.app.use(bodyParser.json()) // 使用中间件： 对象格式转为json格式
      // 定义列表接口
      // dev.app.get('/api/list', (req, res) => {
      //   res.send({
      //     code: 200,
      //     data: list,
      //     total: list.length
      //   })
      // })
      dev.app.get('/api/list', (req, res) => {
        // 获取前端传过来的参数：页码  条数
        const { pagination, pageNum } = req.query
        res.send({
          code: 200,
          //  1  10:  0  1  2   3   4  5   6  7  8  9 
          //  2  10:  10    -  19
          data: list.slice((pagination - 1) * pageNum, pagination * pageNum), // slice(0, 10)
          total: list.length
        })
      })
      // 详情接口
      dev.app.get('/api/detail', (req, res) => {
        const { id } = req.query
        // const id = req.query.id
        res.send({
          code: 200,
          // find()
          data: list.find(item => item.id == id) // 找到符合条件的第一个元素，返回数组的元素，没找到返回undefined
        })
      })
      // 搜索接口
      dev.app.get('/api/search', (req, res) => {
        const { value } = req.query
        res.send({
          code: 200,
          // includes()  判断是否包含某个元素
          // filter()  过滤出符合条件的s所有元素组成的数组
          data: list.filter(item => item.title.includes(value))
        })
      })
      // 分类接口
      dev.app.get('/api/kind', (req, res) => {
        const { key } = req.query
        res.send({
          code: 200,
          data: products.filter(item => item.classify == key)
        })
      })
      // 注册接口
      dev.app.post('/api/register', (req, res) => {
        const { username, password } = req.body // 如果是get请求，前端传过来的参数存储在req.query中；如果是post请求，存储在req.body中
        // 判断用户输入的账号密码已经在users数组中，如果有就说明该账号已经注册过了； 没有就可以正常注册
        const isAdd = users.every(item => item.username != username) // every: 所有元素都满足条件返回true, 只要有一个不满足返回true
        if (isAdd) { // (isAdd == true)
          // 该账号还未注册
          users.push({
            username: username, // 简写：username,
            password: password // 简写： paaawored
          })
          res.send({
            code: 200,
            message: '注册成功'
          })
        } else {
          // 该账号已经注册了
          res.send({
            code: 0,
            message: '该账号已经注册了~'
          })
        }
      })
      // 登录接口
      dev.app.post('/api/login', (req, res) => {
        const { username, password } = req.body
        const user = users.find(item => item.username == username && item.password == password) // 数组的元素 或 undefined
        if (user) {
          res.send({
            code: 200,
            message: '登录成功',
            token: 'yijingdengluchenggong'
          })
        } else {
          res.send({
            code: 0,
            message: '账号或密码错误'
          })
        }
      })
      return mid
    }
  }
})
